;
(function() {
	var sms = require("../../core/_include/sms");
	var text_template = {
		"用户注册": "点纳科技，您正在注册点纳微站用户账号，验证码为：{phone_code}",
		"商家注册": "点纳科技，您正在注册点纳微站商家账号，验证码为：{phone_code}",
		"商家修改": "点纳科技，您正在修改点纳微站商家账号，验证码为：{phone_code}",
	};
	var db = require("../../core/db/index");
	var config = require("../../core/_include/config");
	var phone_code_time = config.phoneCodeTime;
	var dbname = config.dbname.phoneCode;
	var _ti_set = {};
	/*删除数据库中的冗余数据，那些已经失效的数据，并启动计时器*/
	(function() {
		db.find_all(dbname).forEach(function(data) {
			var current_time = +new Date;
			if (!data) {
				return
			};
			if (data.failure_time >= current_time) {
				//已经超时的就进行删除
				console.log("【验证码】删除了冗余数据：", data._id);
				db.remove(dbname, data._id);
			} else {
				//未超时的启动计时器
				_ti_set[data._id] = setTimeout(function() {
					_ti_set[data._id] = null;
					db.remove(dbname, data._id);
				}, current_time - data.failure_time);
			}
		});
	}());
	var phone_code = {
		send: function(type, phone_num) {
			if (!text_template.hasOwnProperty(type)) {
				throwCusError("找不到指定短信模板");
			}
			//短信模板
			var sms_content = text_template[type];
			//查找是否在时间间隔内已经发送过短信了
			var data = db.find_by_id(dbname, phone_num);
			var create_time = +new Date;
			if (!data) {
				//生成随机验证码
				var code = Math.random().toFixed(6).substr(2);
				data = {
					_id: phone_num,
					code: code,
					create_time: create_time,
					failure_time: create_time + phone_code_time
				};
			} else {
				throwCusError("该号码请求验证码过于频繁，请{0}秒后再请求".format(parseInt((data.failure_time - create_time) / 1000)));
			}
			//发送
			sms.send(phone_num, sms_content.format({
				phone_code: code
			}));

			//使用insert，因为前面么有find的情况，就已经抛出了错误。所以不用update
			db.insert(dbname, data);

			//自动删除计时器
			setTimeout(function() {
				db.remove(dbname, phone_num);
				console.log("验证码有效时间到，自动删除", phone_num);
			}, phone_code_time);

		},
		get: function(phone_num) {
			var data = db.find_by_id(dbname, phone_num);
			if (data) {
				return data.code;
			} else {
				throwCusError("验证码已经过期无效，请重新发送");
			}
		}
	};
	module.exports = phone_code;

	// /*TEST*/
	// ;
	// (function() {
	// 	var Fiber = require('fibers');
	// 	Fiber(function() {
	// 		phone_code.send("商家注册", "18649821159");
	// 		setTimeout(function() {
	// 			try {
	// 				phone_code.send("商家注册", "18649821159");
	// 			} catch (e) {
	// 				console.error(e)
	// 			}
	// 		}, 1000)
	// 	}).run();
	// }());
}());